package superminer.xinfang.com.ipreport.util;

import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.v4.content.FileProvider;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;

import superminer.xinfang.com.ipreport.R;
import superminer.xinfang.com.ipreport.base.BaseApplication;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import static superminer.xinfang.com.ipreport.R.styleable.FlikerProgressBar;

/**
 * 检查更新
 */
public class UpdateManager {

	private Context mContext;

	//提示语
	private String updateMsg = "";

	//返回的安装包url
	private String apkUrl = "";


	private Dialog noticeDialog;

	private Dialog downloadDialog;
	 /*下载包安装路径*/
    private String savePath = "/sdcard/updatedemo/";

    private  String saveFileName = savePath + "ipreport.apk";

    /* 进度条与通知ui刷新的handler和msg常量 */
    private FlikerProgressBar mProgress;


    private static final int DOWN_UPDATE = 1;

    private static final int DOWN_OVER = 2;

    private int progress;

    private Thread downLoadThread;

    private boolean interceptFlag = false;

    private Handler mHandler = new Handler(){
    	public void handleMessage(Message msg) {
    		switch (msg.what) {
			case DOWN_UPDATE:
				mProgress.setProgress(progress);
				if (progress==99||progress>99&&downloadDialog!=null)
				{
					downloadDialog.dismiss();
//					mProgress.finishLoad();
				}
				break;
			case DOWN_OVER:

				installApk();
				break;
			default:
				break;
			}
    	};
    };

	public UpdateManager(Context context) {
		this.mContext = context;
	}

	public UpdateManager(Context mContext, String code, String updateMsg, String apkUrl) {
		this.mContext = mContext;
		this.updateMsg = updateMsg;
		this.apkUrl =apkUrl;
		if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
		{
			savePath=mContext.getExternalCacheDir().getPath()+"/ipreportapk/";
		}
		else
		{
			savePath=mContext.getCacheDir().getPath()+"/ipreportapk/";
		}
		saveFileName = savePath + "ipreport.apk";

	}

	//外部接口让主Activity调用
	public void checkUpdateInfo(){
		showNoticeDialog();
	}


	private void showNoticeDialog(){
		Builder builder = new Builder(mContext);
		builder.setTitle("软件版本更新");
		builder.setMessage(updateMsg);
		builder.setCancelable(false);
		builder.setPositiveButton("下载", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
				showDownloadDialog();
			}
		});
		builder.setNegativeButton("以后再说", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
			}
		});
		noticeDialog = builder.create();
		noticeDialog.show();
	}

	private void showDownloadDialog(){
		Builder builder = new Builder(mContext);
		builder.setTitle("软件版本更新");
		builder.setCancelable(false);
		final LayoutInflater inflater = LayoutInflater.from(mContext);
		View v = inflater.inflate(R.layout.progress, null);
		mProgress = (FlikerProgressBar)v.findViewById(R.id.progress);

		builder.setView(v);
		builder.setNegativeButton("取消", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
				interceptFlag = true;
			}
		});
		downloadDialog = builder.create();
		downloadDialog.show();

		downloadApk();
	}

	private Runnable mdownApkRunnable = new Runnable() {
		@Override
		public void run() {
			try {
				URL url = new URL(apkUrl);
//				URL url = new URL("http://42.56.65.16/imtt.dd.qq.com/16891/582D47DF69EB32B8059BAAF9E2F38B18.apk");
				Log.i("-->","软件下载地址："+apkUrl);
				HttpURLConnection conn = (HttpURLConnection)url.openConnection();
				conn.connect();
				int length = conn.getContentLength();
				InputStream is = conn.getInputStream();

				File file = new File(savePath);
				if(!file.exists()){
					file.mkdir();
				}
				String apkFile = saveFileName;
				File ApkFile = new File(apkFile);
				FileOutputStream fos = new FileOutputStream(ApkFile);

				int count = 0;
				byte buf[] = new byte[1024];

				do{
		    		int numread = is.read(buf);
		    		count += numread;
		    	    progress =(int)(((float)count / length) * 100);
		    	    //更新进度
		    	    mHandler.sendEmptyMessage(DOWN_UPDATE);
		    		if(numread <= 0){
		    			//下载完成通知安装
		    			mHandler.sendEmptyMessage(DOWN_OVER);
		    			break;
		    		}
		    		fos.write(buf,0,numread);
		    	}while(!interceptFlag);//点击取消就停止下载.

				fos.close();
				is.close();
			} catch (MalformedURLException e) {
				e.printStackTrace();
			} catch(IOException e){
				e.printStackTrace();
			}

		}
	};

	 /**
     * 下载apk
     * @param
     */

	private void downloadApk(){
		downLoadThread = new Thread(mdownApkRunnable);
		downLoadThread.start();
	}
	 /**
     * 安装apk
     * @param
     */
	private void installApk(){
		File apkfile = new File(saveFileName);
        if (!apkfile.exists()) {
            return;
        }
        Intent i = new Intent(Intent.ACTION_VIEW);

		//判读版本是否在7.0以上
		if (Build.VERSION.SDK_INT >= 24) {
			//provider authorities
			Uri apkUri = FileProvider.getUriForFile(mContext, "superminer.xinfang.com.ipreport", apkfile);
			//Granting Temporary Permissions to a URI
			i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
			i.setDataAndType(apkUri, "application/vnd.android.package-archive");
		} else {
			i.setDataAndType(Uri.fromFile(apkfile), "application/vnd.android.package-archive");
		}


//        i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
//        mContext.startActivity(i);

	}
}
